package cc.wfu.domain.user.service;

import cc.wfu.domain.user.model.entity.UserEntity;
import cc.wfu.domain.user.repository.IUserRepository;
import cc.wfu.types.enums.Constants;
import cc.wfu.types.exception.UserServiceException;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;

/**
 * @Author: jia-qiang ljq1024.cc
 * @desc: 用户相关服务实现
 * @Date: 2024-05-16-10:41
 */
@Slf4j
@Service
public class UserService implements IUserService {

    @Resource
    private IUserRepository repository;

    /** 用户注册接口 */
    @Override
    public void save(UserEntity userEntity) {
        if (repository.save(userEntity) != 1) {
            log.error("用户注册接口 - {}", "插入数据库失败。");
            throw new UserServiceException(Constants.ResponseError.USER_REGISTER_ERROR.getInfo());
        }
    }

    /**
     * 通过邮箱查询用户
     * @param email 用户邮箱
     * @return 用户信息
     */
    @Override
    public UserEntity queryUser(String email) {
        UserEntity userEntity = repository.queryUser(email);
        if (userEntity == null) {
            log.error("通过邮箱查询用户 - {}", "该邮箱账号不存在或已被冻结");
            throw new UserServiceException(Constants.ResponseError.ILLEGAL_USER_PASSWORD_ERROR.getInfo());
        }
        return userEntity;
    }

    /**
     * 发送 MQ 消息，记录登录时间
     * @param email 用户邮箱
     */
    @Override
    public void sendLoginMqMessage(String email) {
        repository.sendLoginMqMessage(email);
    }

    /**
     * 修改上次登录时间
     * @param email 用户邮箱
     */
    @Override
    public void updateLastLoginTime(String email) {
        repository.updateLastLoginTime(email);
    }

    /**
     * 修改密码
     * @param userEntity 参数
     */
    @Override
    public void updatePassword(UserEntity userEntity) {
        if (repository.updatePassword(userEntity) != 1) {
            throw new UserServiceException(Constants.ResponseError.UPDATE_USER_PASSWORD_ERROR.getInfo());
        }
    }
}
